aboutsummaryrefslogtreecommitdiffstats
path: root/examples/xmlpatterns
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-01-05 15:58:35 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-01-12 12:28:10 +0000
commit9f2a9aba3aff73e31ea15eb4a7a04b0e50f4ee4e (patch)
tree92dcb0c4f64df8a8375af2e1a9bb1170068c36b2 /examples/xmlpatterns
parent26c046e521c38bbfc3a263782a3bb74a7c1bf937 (diff)
Move examples from submodule to pyside-setup
Move PySide2 examples that are owned by the Qt Company to a new examples directory. Done-with: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Task-number: PYSIDE-363 Change-Id: I14099764d9eef2bc35e067086121427955862e3a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'examples/xmlpatterns')
-rw-r--r--examples/xmlpatterns/schema/files/contact.xsd25
-rw-r--r--examples/xmlpatterns/schema/files/invalid_contact.xml11
-rw-r--r--examples/xmlpatterns/schema/files/invalid_order.xml13
-rw-r--r--examples/xmlpatterns/schema/files/invalid_recipe.xml14
-rw-r--r--examples/xmlpatterns/schema/files/order.xsd23
-rw-r--r--examples/xmlpatterns/schema/files/recipe.xsd40
-rw-r--r--examples/xmlpatterns/schema/files/valid_contact.xml11
-rw-r--r--examples/xmlpatterns/schema/files/valid_order.xml18
-rw-r--r--examples/xmlpatterns/schema/files/valid_recipe.xml13
-rwxr-xr-xexamples/xmlpatterns/schema/schema.py278
-rw-r--r--examples/xmlpatterns/schema/schema.qrc13
-rw-r--r--examples/xmlpatterns/schema/schema.ui71
-rw-r--r--examples/xmlpatterns/schema/schema_rc.py501
-rw-r--r--examples/xmlpatterns/schema/ui_schema.py62
14 files changed, 1093 insertions, 0 deletions
diff --git a/examples/xmlpatterns/schema/files/contact.xsd b/examples/xmlpatterns/schema/files/contact.xsd
new file mode 100644
index 000000000..3e1b5704c
--- /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 000000000..42f1edd67
--- /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 000000000..8ffc5fda4
--- /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 000000000..4d75af6a1
--- /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 000000000..405cafe43
--- /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 000000000..bbbafd9a3
--- /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 000000000..53c04d4b5
--- /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 000000000..f83c36cb1
--- /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 000000000..f6499ba21
--- /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/schema.py b/examples/xmlpatterns/schema/schema.py
new file mode 100755
index 000000000..1a3c51e69
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema.py
@@ -0,0 +1,278 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+from PySide2 import QtCore, QtGui, QtWidgets, QtXmlPatterns
+
+import schema_rc
+from ui_schema import Ui_SchemaMainWindow
+
+
+try:
+ # Python v2.
+ unicode
+
+ def encode_utf8(ba):
+ return unicode(ba, encoding='utf8')
+
+ def decode_utf8(qs):
+ return QtCore.QByteArray(str(qs))
+
+except NameError:
+ # Python v3.
+
+ def encode_utf8(ba):
+ return str(ba, encoding='utf8')
+
+ def decode_utf8(qs):
+ return QtCore.QByteArray(bytes(qs, encoding='utf8'))
+
+
+class XmlSyntaxHighlighter(QtGui.QSyntaxHighlighter):
+
+ def __init__(self, parent=None):
+ super(XmlSyntaxHighlighter, self).__init__(parent)
+
+ self.highlightingRules = []
+
+ # Tag format.
+ format = QtGui.QTextCharFormat()
+ format.setForeground(QtCore.Qt.darkBlue)
+ format.setFontWeight(QtGui.QFont.Bold)
+ pattern = QtCore.QRegExp("(<[a-zA-Z:]+\\b|<\\?[a-zA-Z:]+\\b|\\?>|>|/>|</[a-zA-Z:]+>)")
+ self.highlightingRules.append((pattern, format))
+
+ # Attribute format.
+ format = QtGui.QTextCharFormat()
+ format.setForeground(QtCore.Qt.darkGreen)
+ pattern = QtCore.QRegExp("[a-zA-Z:]+=")
+ self.highlightingRules.append((pattern, format))
+
+ # Attribute content format.
+ format = QtGui.QTextCharFormat()
+ format.setForeground(QtCore.Qt.red)
+ pattern = QtCore.QRegExp("(\"[^\"]*\"|'[^']*')")
+ self.highlightingRules.append((pattern, format))
+
+ # Comment format.
+ self.commentFormat = QtGui.QTextCharFormat()
+ self.commentFormat.setForeground(QtCore.Qt.lightGray)
+ self.commentFormat.setFontItalic(True)
+
+ self.commentStartExpression = QtCore.QRegExp("<!--")
+ self.commentEndExpression = QtCore.QRegExp("-->")
+
+ def highlightBlock(self, text):
+ for pattern, format in self.highlightingRules:
+ expression = QtCore.QRegExp(pattern)
+ index = expression.indexIn(text)
+ while index >= 0:
+ length = expression.matchedLength()
+ self.setFormat(index, length, format)
+ index = expression.indexIn(text, index + length)
+
+ self.setCurrentBlockState(0)
+
+ startIndex = 0
+ if self.previousBlockState() != 1:
+ startIndex = self.commentStartExpression.indexIn(text)
+
+ while startIndex >= 0:
+ endIndex = self.commentEndExpression.indexIn(text, startIndex)
+ if endIndex == -1:
+ self.setCurrentBlockState(1)
+ commentLength = text.length() - startIndex
+ else:
+ commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength()
+
+ self.setFormat(startIndex, commentLength, self.commentFormat)
+ startIndex = self.commentStartExpression.indexIn(text,
+ startIndex + commentLength)
+
+
+class MessageHandler(QtXmlPatterns.QAbstractMessageHandler):
+
+ def __init__(self):
+ super(MessageHandler, self).__init__()
+
+ self.m_description = ""
+ self.m_sourceLocation = QtXmlPatterns.QSourceLocation()
+
+ def statusMessage(self):
+ return self.m_description
+
+ def line(self):
+ return self.m_sourceLocation.line()
+
+ def column(self):
+ return self.m_sourceLocation.column()
+
+ def handleMessage(self, type, description, identifier, sourceLocation):
+ self.m_description = description
+ self.m_sourceLocation = sourceLocation
+
+
+class MainWindow(QtWidgets.QMainWindow, Ui_SchemaMainWindow):
+
+ def __init__(self):
+ QtWidgets.QMainWindow.__init__(self)
+
+ self.setupUi(self)
+
+ XmlSyntaxHighlighter(self.schemaView.document())
+ XmlSyntaxHighlighter(self.instanceEdit.document())
+
+ self.schemaSelection.addItem("Contact Schema")
+ self.schemaSelection.addItem("Recipe Schema")
+ self.schemaSelection.addItem("Order Schema")
+
+ self.instanceSelection.addItem("Valid Contact Instance")
+ self.instanceSelection.addItem("Invalid Contact Instance")
+
+ self.schemaSelection.currentIndexChanged[int].connect(self.schemaSelected)
+ self.instanceSelection.currentIndexChanged[int].connect(self.instanceSelected)
+ self.validateButton.clicked.connect(self.validate)
+ self.instanceEdit.textChanged.connect(self.textChanged)
+
+ self.validationStatus.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter)
+
+ self.schemaSelected(0)
+ self.instanceSelected(0)
+
+ def schemaSelected(self, index):
+ self.instanceSelection.clear()
+
+ if index == 0:
+ self.instanceSelection.addItem("Valid Contact Instance")
+ self.instanceSelection.addItem("Invalid Contact Instance")
+ elif index == 1:
+ self.instanceSelection.addItem("Valid Recipe Instance")
+ self.instanceSelection.addItem("Invalid Recipe Instance")
+ elif index == 2:
+ self.instanceSelection.addItem("Valid Order Instance")
+ self.instanceSelection.addItem("Invalid Order Instance")
+
+ self.textChanged()
+
+ schemaFile = QtCore.QFile(':/schema_%d.xsd' % index)
+ schemaFile.open(QtCore.QIODevice.ReadOnly)
+ schemaData = schemaFile.readAll()
+ self.schemaView.setPlainText(encode_utf8(schemaData))
+
+ self.validate()
+
+ def instanceSelected(self, index):
+ if index is -1:
+ return
+
+ index += 2 * self.schemaSelection.currentIndex()
+ instanceFile = QtCore.QFile(':/instance_%d.xml' % index)
+ instanceFile.open(QtCore.QIODevice.ReadOnly)
+ instanceData = instanceFile.readAll()
+ self.instanceEdit.setPlainText(encode_utf8(instanceData))
+
+ self.validate()
+
+ def validate(self):
+ schemaData = decode_utf8(self.schemaView.toPlainText())
+ instanceData = decode_utf8(self.instanceEdit.toPlainText())
+
+ messageHandler = MessageHandler()
+
+ schema = QtXmlPatterns.QXmlSchema()
+ schema.setMessageHandler(messageHandler)
+ schema.load(schemaData, QtCore.QUrl())
+
+ errorOccurred = False
+ if not schema.isValid():
+ errorOccurred = True
+ else:
+ validator = QtXmlPatterns.QXmlSchemaValidator(schema)
+ if not validator.validate(instanceData):
+ errorOccurred = True
+
+ if errorOccurred:
+ self.validationStatus.setText(messageHandler.statusMessage())
+ self.moveCursor(messageHandler.line(), messageHandler.column())
+ background = QtCore.Qt.red
+ else:
+ self.validationStatus.setText("validation successful")
+ background = QtCore.Qt.green
+
+ styleSheet = 'QLabel {background: %s; padding: 3px}' % QtGui.QColor(background).lighter(160).name()
+ self.validationStatus.setStyleSheet(styleSheet)
+
+ def textChanged(self):
+ self.instanceEdit.setExtraSelections([])
+
+ def moveCursor(self, line, column):
+ self.instanceEdit.moveCursor(QtGui.QTextCursor.Start)
+
+ for i in range(1, line):
+ self.instanceEdit.moveCursor(QtGui.QTextCursor.Down)
+
+ for i in range(1, column):
+ self.instanceEdit.moveCursor(QtGui.QTextCursor.Right)
+
+ extraSelections = []
+ selection = QtWidgets.QTextEdit.ExtraSelection()
+
+ lineColor = QtGui.QColor(QtCore.Qt.red).lighter(160)
+ selection.format.setBackground(lineColor)
+ selection.format.setProperty(QtGui.QTextFormat.FullWidthSelection, True)
+ selection.cursor = self.instanceEdit.textCursor()
+ selection.cursor.clearSelection()
+ extraSelections.append(selection)
+
+ self.instanceEdit.setExtraSelections(extraSelections)
+
+ self.instanceEdit.setFocus()
+
+
+if __name__ == '__main__':
+
+ import sys
+
+ app = QtWidgets.QApplication(sys.argv)
+ window = MainWindow()
+ window.show()
+ sys.exit(app.exec_())
diff --git a/examples/xmlpatterns/schema/schema.qrc b/examples/xmlpatterns/schema/schema.qrc
new file mode 100644
index 000000000..eb7ddfd7c
--- /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 000000000..b67f444d2
--- /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/schema/schema_rc.py b/examples/xmlpatterns/schema/schema_rc.py
new file mode 100644
index 000000000..c4df53030
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema_rc.py
@@ -0,0 +1,501 @@
+# -*- coding: utf-8 -*-
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Resource object code
+#
+# Created: Tue Jul 27 10:50:50 2010
+# by: The Resource Compiler for PySide (Qt v4.6.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\x67\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x64\x65\x72\x22\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\
+\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x63\x75\x73\x74\x6f\x6d\x65\x72\x49\
+\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\
+\x69\x74\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x22\x20\x74\x79\x70\x65\
+\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x20\x6d\
+\x61\x78\x4f\x63\x63\x75\x72\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\
+\x64\x65\x64\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x64\x65\x6c\x69\x76\x65\
+\x72\x79\x44\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\
+\x64\x3a\x64\x61\x74\x65\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x70\x61\x79\
+\x65\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x62\x6f\
+\x6f\x6c\x65\x61\x6e\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\
+\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\
+\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\
+\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\
+\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x22\x20\x74\x79\
+\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\x69\x76\x65\
+\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x75\x6e\x74\x22\
+\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\
+\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\
+\x6d\x65\x6e\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\
+\x73\x74\x72\x69\x6e\x67\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\x72\
+\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\
+\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\x64\x3a\x73\x63\
+\x68\x65\x6d\x61\x3e\x0a\
+\x00\x00\x01\x1d\
+\x3c\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\
+\x69\x74\x6c\x65\x3e\x50\x72\x6f\x66\x2e\x3c\x2f\x74\x69\x74\x6c\
+\x65\x3e\x0a\x20\x20\x20\x20\x3c\x77\x6f\x72\x6b\x41\x64\x64\x72\
+\x65\x73\x73\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x72\x65\x65\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\
+\x65\x6e\x20\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\
+\x3e\x4e\x2d\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\
+\x4f\x73\x6c\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\
+\x77\x61\x79\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x77\x6f\x72\x6b\x41\x64\x64\x72\x65\x73\x73\x3e\
+\x0a\x3c\x2f\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\
+\x00\x00\x02\x25\
+\x3c\
+\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\
+\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\
+\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\
+\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\
+\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\
+\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\
+\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\
+\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\
+\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\
+\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x6d\x69\x6e\
+\x75\x74\x65\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\
+\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x65\x70\x3e\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\
+\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\
+\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x73\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\
+\x6f\x6e\x65\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\
+\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\
+\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x73\x74\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\
+\x65\x72\x20\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\
+\x20\x70\x6c\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\
+\x66\x20\x63\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\
+\x20\x70\x69\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\
+\x47\x72\x69\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\
+\x63\x68\x65\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\
+\x65\x64\x20\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\
+\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\
+\x3e\x35\x2e\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\
+\x6a\x6f\x79\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\
+\x3c\x2f\x6d\x65\x74\x68\x6f\x64\x3e\x0a\x3c\x2f\x72\x65\x63\x69\
+\x70\x65\x3e\x0a\
+\x00\x00\x03\xbb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x74\x61\x63\x74\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\
+\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\
+\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\
+\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x67\x69\x76\x65\x6e\x4e\x61\
+\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\
+\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\
+\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x66\x61\x6d\x69\x6c\
+\x79\x4e\x61\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\
+\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\
+\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x62\x69\
+\x72\x74\x68\x64\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\
+\x73\x64\x3a\x64\x61\x74\x65\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\
+\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\
+\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x6d\x65\
+\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\x61\
+\x64\x64\x72\x65\x73\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\
+\x6b\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\
+\x61\x64\x64\x72\x65\x73\x73\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\
+\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\
+\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\
+\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\
+\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\
+\x64\x64\x72\x65\x73\x73\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x73\
+\x74\x72\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\
+\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x7a\x69\x70\x43\x6f\x64\
+\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\
+\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\
+\x6e\x61\x6d\x65\x3d\x22\x63\x69\x74\x79\x22\x20\x74\x79\x70\x65\
+\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\
+\x6f\x75\x6e\x74\x72\x79\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\
+\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\
+\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\
+\x64\x3a\x73\x63\x68\x65\x6d\x61\x3e\x0a\
+\x00\x00\x01\xb6\
+\x3c\
+\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\
+\x6f\x6d\x65\x72\x49\x64\x3e\x31\x39\x34\x32\x32\x33\x3c\x2f\x63\
+\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\
+\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x32\x32\x34\
+\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x35\x3c\x2f\
+\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\
+\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\
+\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\
+\x69\x63\x6c\x65\x49\x64\x3e\x33\x32\x33\x37\x32\x3c\x2f\x61\x72\
+\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x31\x32\x3c\x2f\x63\x6f\x75\x6e\
+\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\
+\x65\x6e\x74\x3e\x77\x69\x74\x68\x6f\x75\x74\x20\x73\x74\x72\x69\
+\x70\x65\x73\x3c\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x33\
+\x36\x34\x39\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x32\
+\x3c\x2f\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\
+\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\
+\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\
+\x31\x2d\x32\x33\x3c\x2f\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\
+\x74\x65\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x79\x65\x64\x3e\x74\
+\x72\x75\x65\x3c\x2f\x70\x61\x79\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\
+\x64\x65\x72\x3e\x0a\
+\x00\x00\x02\x55\
+\x3c\
+\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\
+\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\
+\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\
+\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\
+\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\
+\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\
+\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\
+\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\
+\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\
+\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x64\x61\x79\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x68\x6f\x64\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\
+\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\x62\x72\x65\
+\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\x2e\x3c\x2f\
+\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\
+\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\x6f\x6e\x65\
+\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x73\x6c\
+\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\x3c\x2f\x73\
+\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\x65\x72\x20\
+\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x70\x6c\
+\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x63\
+\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\x20\x70\x69\
+\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\x47\x72\x69\
+\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\x63\x68\x65\
+\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\x65\x64\x20\
+\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x35\x2e\
+\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\x6a\x6f\x79\
+\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6d\
+\x65\x74\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\
+\x65\x6e\x74\x3e\x54\x65\x6c\x6c\x20\x79\x6f\x75\x72\x20\x66\x72\
+\x69\x65\x6e\x64\x73\x20\x61\x62\x6f\x75\x74\x20\x69\x74\x21\x3c\
+\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x3c\x2f\x72\x65\x63\x69\
+\x70\x65\x3e\x0a\
+\x00\x00\x06\x05\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x72\x65\x63\x69\x70\x65\x22\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\
+\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\
+\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\
+\x74\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x74\x6c\x65\x22\x20\x74\
+\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\
+\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\
+\x6e\x61\x6d\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\
+\x22\x20\x74\x79\x70\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\
+\x6e\x74\x54\x79\x70\x65\x22\x20\x6d\x61\x78\x4f\x63\x63\x75\x72\
+\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\x64\x65\x64\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x74\x69\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x74\
+\x69\x6d\x65\x54\x79\x70\x65\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\
+\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x65\
+\x74\x68\x6f\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\
+\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x73\x74\x65\x70\x22\x20\x74\x79\x70\x65\x3d\x22\x78\
+\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x20\x6d\x61\x78\x4f\x63\
+\x63\x75\x72\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\x64\x65\x64\x22\
+\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\
+\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\
+\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x78\x73\
+\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x3e\x0a\x0a\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\
+\x20\x6e\x61\x6d\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\
+\x74\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\
+\x61\x6d\x65\x3d\x22\x6e\x61\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\
+\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\
+\x69\x62\x75\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\x71\x75\x61\x6e\
+\x74\x69\x74\x79\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\
+\x70\x6f\x73\x69\x74\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\
+\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\
+\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\
+\x75\x6e\x69\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\
+\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\
+\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\
+\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\
+\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x6d\
+\x65\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\
+\x61\x6d\x65\x3d\x22\x71\x75\x61\x6e\x74\x69\x74\x79\x22\x20\x74\
+\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\x69\x76\
+\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\
+\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\x75\x6e\x69\x74\x22\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x73\x69\x6d\x70\x6c\x65\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\
+\x64\x3a\x72\x65\x73\x74\x72\x69\x63\x74\x69\x6f\x6e\x20\x62\x61\
+\x73\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6e\x75\x6d\x65\x72\
+\x61\x74\x69\x6f\x6e\x20\x76\x61\x6c\x75\x65\x3d\x22\x73\x65\x63\
+\x6f\x6e\x64\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x65\x6e\x75\x6d\x65\x72\x61\x74\x69\x6f\x6e\x20\x76\x61\x6c\
+\x75\x65\x3d\x22\x6d\x69\x6e\x75\x74\x65\x73\x22\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6e\x75\x6d\x65\x72\x61\x74\
+\x69\x6f\x6e\x20\x76\x61\x6c\x75\x65\x3d\x22\x68\x6f\x75\x72\x73\
+\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x72\x65\x73\x74\x72\x69\
+\x63\x74\x69\x6f\x6e\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x69\x6d\x70\x6c\x65\x54\
+\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\
+\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\x64\x3a\x73\x63\x68\x65\
+\x6d\x61\x3e\x0a\
+\x00\x00\x01\x2e\
+\x3c\
+\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\
+\x6f\x6d\x65\x72\x49\x64\x3e\x32\x33\x34\x32\x31\x39\x3c\x2f\x63\
+\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\
+\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x31\x36\x39\
+\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x33\x3c\x2f\
+\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\
+\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\
+\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\
+\x69\x63\x6c\x65\x49\x64\x3e\x32\x34\x37\x34\x39\x3c\x2f\x61\x72\
+\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x39\x3c\x2f\x63\x6f\x75\x6e\x74\
+\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\
+\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\
+\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\x31\x2d\x32\x33\x3c\x2f\x64\
+\x65\x6c\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x0a\x20\x20\x20\
+\x20\x3c\x70\x61\x79\x65\x64\x3e\x79\x65\x73\x3c\x2f\x70\x61\x79\
+\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\x64\x65\x72\x3e\x0a\
+\x00\x00\x01\x2a\
+\x3c\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x62\
+\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x31\x39\x37\x37\x2d\x31\x32\
+\x2d\x32\x35\x3c\x2f\x62\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x65\x65\
+\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\x65\x6e\x20\
+\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\x3e\x4e\x2d\
+\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\x4f\x73\x6c\
+\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\x77\x61\x79\
+\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\
+\x2f\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\x3e\x0a\x3c\x2f\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0c\
+\x08\x16\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x79\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0e\
+\x00\x70\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0c\
+\x08\x10\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x72\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x34\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0e\
+\x00\x73\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x33\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0c\
+\x08\x13\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x75\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x35\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0e\
+\x00\x76\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x01\
+\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x04\x8c\
+\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x74\
+\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x2e\
+\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x14\x90\
+\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x15\xc2\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x03\x6b\
+\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x06\xb5\
+\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x87\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/xmlpatterns/schema/ui_schema.py b/examples/xmlpatterns/schema/ui_schema.py
new file mode 100644
index 000000000..a5690c28d
--- /dev/null
+++ b/examples/xmlpatterns/schema/ui_schema.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'schema.ui'
+#
+# Created: Fri Feb 5 15:27:54 2010
+# by: PyQt4 UI code generator snapshot-4.7.1-c39e85a8e2ec
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore, QtGui, QtWidgets
+
+class Ui_SchemaMainWindow(object):
+ def setupUi(self, SchemaMainWindow):
+ SchemaMainWindow.setObjectName("SchemaMainWindow")
+ SchemaMainWindow.resize(417, 594)
+ self.centralwidget = QtWidgets.QWidget(SchemaMainWindow)
+ self.centralwidget.setObjectName("centralwidget")
+ self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
+ self.gridLayout.setObjectName("gridLayout")
+ self.schemaLabel = QtWidgets.QLabel(self.centralwidget)
+ self.schemaLabel.setObjectName("schemaLabel")
+ self.gridLayout.addWidget(self.schemaLabel, 0, 0, 1, 2)
+ self.schemaSelection = QtWidgets.QComboBox(self.centralwidget)
+ self.schemaSelection.setObjectName("schemaSelection")
+ self.gridLayout.addWidget(self.schemaSelection, 0, 2, 1, 2)
+ self.schemaView = QtWidgets.QTextBrowser(self.centralwidget)
+ self.schemaView.setObjectName("schemaView")
+ self.gridLayout.addWidget(self.schemaView, 1, 0, 1, 4)
+ self.instanceLabel = QtWidgets.QLabel(self.centralwidget)
+ self.instanceLabel.setObjectName("instanceLabel")
+ self.gridLayout.addWidget(self.instanceLabel, 2, 0, 1, 2)
+ self.instanceSelection = QtWidgets.QComboBox(self.centralwidget)
+ self.instanceSelection.setObjectName("instanceSelection")
+ self.gridLayout.addWidget(self.instanceSelection, 2, 2, 1, 2)
+ self.instanceEdit = QtWidgets.QTextEdit(self.centralwidget)
+ self.instanceEdit.setObjectName("instanceEdit")
+ self.gridLayout.addWidget(self.instanceEdit, 3, 0, 1, 4)
+ self.label = QtWidgets.QLabel(self.centralwidget)
+ self.label.setObjectName("label")
+ self.gridLayout.addWidget(self.label, 4, 0, 1, 1)
+ self.validationStatus = QtWidgets.QLabel(self.centralwidget)
+ self.validationStatus.setObjectName("validationStatus")
+ self.gridLayout.addWidget(self.validationStatus, 4, 1, 1, 2)
+ self.validateButton = QtWidgets.QPushButton(self.centralwidget)
+ self.validateButton.setObjectName("validateButton")
+ self.gridLayout.addWidget(self.validateButton, 4, 3, 1, 1)
+ SchemaMainWindow.setCentralWidget(self.centralwidget)
+ self.statusbar = QtWidgets.QStatusBar(SchemaMainWindow)
+ self.statusbar.setObjectName("statusbar")
+ SchemaMainWindow.setStatusBar(self.statusbar)
+
+ self.retranslateUi(SchemaMainWindow)
+ QtCore.QMetaObject.connectSlotsByName(SchemaMainWindow)
+
+ def retranslateUi(self, SchemaMainWindow):
+ SchemaMainWindow.setWindowTitle(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Schema Validation", None))
+ self.schemaLabel.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Schema Document:", None))
+ self.instanceLabel.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Instance Document:", None))
+ self.label.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "Status:", None))
+ self.validationStatus.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "not validated", None))
+ self.validateButton.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "Validate", None))
+