- Add ISO-Schematron-schema-optional.patch and

remove-ISO-Schematron-schema.patch to remove non-free RNG
  schema file (bsc#1213351).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-lxml?expand=0&rev=183
This commit is contained in:
Matej Cepl 2023-07-14 16:45:23 +00:00 committed by Git OBS Bridge
parent 364711776d
commit 6074d27829
4 changed files with 854 additions and 0 deletions

View File

@ -0,0 +1,110 @@
From 4bfab2c821961fb4c5ed8a04e329778c9b09a1df Mon Sep 17 00:00:00 2001
From: Stefan Behnel <stefan_ml@behnel.de>
Date: Wed, 12 Jul 2023 16:59:07 +0200
Subject: [PATCH] Make the validation of ISO-Schematron files optional in lxml,
depending on the availability of the RNG validation file. Some lxml
distributions discard the validation schema file due to licensing issues.
See https://bugs.launchpad.net/lxml/+bug/2024343
---
CHANGES.txt | 8 ++++++++
doc/validation.txt | 9 +++++++++
src/lxml/isoschematron/__init__.py | 24 +++++++++++++++++++-----
3 files changed, 36 insertions(+), 5 deletions(-)
Index: lxml-4.9.2/CHANGES.txt
===================================================================
--- lxml-4.9.2.orig/CHANGES.txt
+++ lxml-4.9.2/CHANGES.txt
@@ -2,6 +2,14 @@
lxml changelog
==============
+* LP#2024343: The validation of the schema file itself is now optional in the
+ ISO-Schematron implementation. This was done because some lxml distributions
+ discard the RNG validation schema file due to licensing issues. The validation
+ can now always be disabled with ``Schematron(..., validate_schema=False)``.
+ It is enabled by default if available and disabled otherwise. The module
+ constant ``lxml.isoschematron.schematron_schema_valid_supported`` can be used
+ to detect whether schema file validation is available.
+
4.9.2 (2022-12-13)
==================
Index: lxml-4.9.2/doc/validation.txt
===================================================================
--- lxml-4.9.2.orig/doc/validation.txt
+++ lxml-4.9.2/doc/validation.txt
@@ -615,6 +615,15 @@ The usage of validation phases is a uniq
a very powerful tool e.g. for establishing validation stages or to provide
different validators for different "validation audiences".
+Note: Some lxml distributions exclude the validation schema file due to licensing issues.
+Since lxml 5.0, the validation of the user provided schema can be disabled with
+``Schematron(..., validate_schema=False)``.
+It is enabled by default if available and disabled otherwise. Previous versions of
+lxml always had it enabled and failed at import time if the file was not available.
+Thus, some distributions chose to remove the entire ISO-Schematron support.
+The module constant ``lxml.isoschematron.schematron_schema_valid_supported`` can be used
+since lxml 5.0 to detect whether schema file validation is available.
+
(Pre-ISO-Schematron)
--------------------
Index: lxml-4.9.2/src/lxml/isoschematron/__init__.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/isoschematron/__init__.py
+++ lxml-4.9.2/src/lxml/isoschematron/__init__.py
@@ -61,10 +61,16 @@ iso_svrl_for_xslt1 = _etree.XSLT(_etree.
svrl_validation_errors = _etree.XPath(
'//svrl:failed-assert', namespaces={'svrl': SVRL_NS})
-
# RelaxNG validator for schematron schemas
-schematron_schema_valid = _etree.RelaxNG(
- file=os.path.join(_resources_dir, 'rng', 'iso-schematron.rng'))
+schematron_schema_valid_supported = False
+try:
+ schematron_schema_valid = _etree.RelaxNG(
+ file=os.path.join(_resources_dir, 'rng', 'iso-schematron.rng'))
+ schematron_schema_valid_supported = True
+except _etree.RelaxNGParseError:
+ # Some distributions delete the file due to licensing issues.
+ def schematron_schema_valid(arg):
+ raise NotImplementedError("Validating the ISO schematron requires iso-schematron.rng")
def stylesheet_params(**kwargs):
@@ -153,6 +159,13 @@ class Schematron(_etree._Validator):
report document gets stored and can be accessed as the ``validation_report``
property.
+ If ``validate_schema`` is set to False, the validation of the schema file
+ itself is disabled. Validation happens by default after building the full
+ schema, unless the schema validation file cannot be found at import time,
+ in which case the validation gets disabled. Some lxml distributions exclude
+ this file due to licensing issues. ISO-Schematron validation can then still
+ be used normally, but the schemas themselves cannot be validated.
+
Here is a usage example::
>>> from lxml import etree
@@ -234,7 +247,8 @@ class Schematron(_etree._Validator):
def __init__(self, etree=None, file=None, include=True, expand=True,
include_params={}, expand_params={}, compile_params={},
store_schematron=False, store_xslt=False, store_report=False,
- phase=None, error_finder=ASSERTS_ONLY):
+ phase=None, error_finder=ASSERTS_ONLY,
+ validate_schema=schematron_schema_valid_supported):
super(Schematron, self).__init__()
self._store_report = store_report
@@ -273,7 +287,7 @@ class Schematron(_etree._Validator):
schematron = self._include(schematron, **include_params)
if expand:
schematron = self._expand(schematron, **expand_params)
- if not schematron_schema_valid(schematron):
+ if validate_schema and not schematron_schema_valid(schematron):
raise _etree.SchematronParseError(
"invalid schematron schema: %s" %
schematron_schema_valid.error_log)

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Fri Jul 14 15:42:00 UTC 2023 - Matej Cepl <mcepl@suse.com>
- Add ISO-Schematron-schema-optional.patch and
remove-ISO-Schematron-schema.patch to remove non-free RNG
schema file (bsc#1213351).
-------------------------------------------------------------------
Thu May 4 14:52:53 UTC 2023 - David Anes <david.anes@suse.com>

View File

@ -36,6 +36,12 @@ Patch1: skip-test-under-libxml2-2.10.4.patch
# PATCH-FIX-OPENSUSE Skip a test under libxml2 2.11.1+
# https://bugs.launchpad.net/lxml/+bug/2018522
Patch2: skip-test-under-libxml2-2.11.1.patch
# PATCH-FIX-UPSTREAM ISO-Schematron-schema-optional.patch lp#2024343 mcepl@suse.com
# Make ISO Schematron RNG validation schemes optional and then remove it gh#lxml/lxml@4bfab2c82196
Patch3: ISO-Schematron-schema-optional.patch
# PATCH-FIX-UPSTREAM remove-ISO-Schematron-schema.patch gl#fedora/legal/fedora-license-data/-#154 mcepl@suse.com
# Actually remove the schema
Patch4: remove-ISO-Schematron-schema.patch
BuildRequires: %{python_module Cython >= 0.29.7}
BuildRequires: %{python_module base}
BuildRequires: %{python_module cssselect >= 0.9.1}

View File

@ -0,0 +1,731 @@
---
src/lxml/isoschematron/resources/rng/iso-schematron.rng | 709 ----------------
src/lxml/tests/test_isoschematron.py | 1
2 files changed, 1 insertion(+), 709 deletions(-)
Index: lxml-4.9.2/src/lxml/isoschematron/resources/rng/iso-schematron.rng
===================================================================
--- lxml-4.9.2.orig/src/lxml/isoschematron/resources/rng/iso-schematron.rng
+++ /dev/null
@@ -1,709 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright © ISO/IEC 2015 -->
-<!--
- The following permission notice and disclaimer shall be included in all
- copies of this XML schema ("the Schema"), and derivations of the Schema:
-
- Permission is hereby granted, free of charge in perpetuity, to any
- person obtaining a copy of the Schema, to use, copy, modify, merge and
- distribute free of charge, copies of the Schema for the purposes of
- developing, implementing, installing and using software based on the
- Schema, and to permit persons to whom the Schema is furnished to do so,
- subject to the following conditions:
-
- THE SCHEMA IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SCHEMA OR THE USE OR
- OTHER DEALINGS IN THE SCHEMA.
-
- In addition, any modified copy of the Schema shall include the following
- notice:
-
- "THIS SCHEMA HAS BEEN MODIFIED FROM THE SCHEMA DEFINED IN ISO/IEC 19757-3,
- AND SHOULD NOT BE INTERPRETED AS COMPLYING WITH THAT STANDARD".
--->
-<grammar ns="http://purl.oclc.org/dsdl/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
- <start>
- <ref name="schema"/>
- </start>
- <!-- Element declarations -->
- <define name="schema">
- <element name="schema">
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <optional>
- <attribute name="schemaVersion">
- <ref name="non-empty-string"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="defaultPhase">
- <data type="IDREF"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="queryBinding">
- <ref name="non-empty-string"/>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <group>
- <optional>
- <ref name="title"/>
- </optional>
- <zeroOrMore>
- <ref name="ns"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="phase"/>
- </zeroOrMore>
- <oneOrMore>
- <ref name="pattern"/>
- </oneOrMore>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <optional>
- <ref name="diagnostics"/>
- </optional>
- <optional>
- <!-- edited (lxml): required in standard, optional here (since it can be empty anyway) -->
- <ref name="properties"/>
- </optional>
- </group>
- </interleave>
- </element>
- </define>
- <define name="active">
- <element name="active">
- <attribute name="pattern">
- <data type="IDREF"/>
- </attribute>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- <ref name="emph"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="assert">
- <element name="assert">
- <attribute name="test">
- <ref name="exprValue"/>
- </attribute>
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="diagnostics">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="properties">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="diagnostic">
- <element name="diagnostic">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="diagnostics">
- <element name="diagnostics">
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="diagnostic"/>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="dir">
- <element name="dir">
- <optional>
- <attribute name="value">
- <choice>
- <value>ltr</value>
- <value>rtl</value>
- </choice>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <text/>
- </interleave>
- </element>
- </define>
- <define name="emph">
- <element name="emph">
- <text/>
- </element>
- </define>
- <define name="extends">
- <element name="extends">
- <choice>
- <attribute name="rule">
- <data type="IDREF"/>
- </attribute>
- <attribute name="href">
- <ref name="uriValue"/>
- </attribute>
- </choice>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="let">
- <element name="let">
- <attribute name="name">
- <ref name="nameValue"/>
- </attribute>
- <choice>
- <attribute name="value">
- <data type="string" datatypeLibrary=""/>
- </attribute>
- <oneOrMore>
- <ref name="foreign-element"/>
- </oneOrMore>
- </choice>
- </element>
- </define>
- <define name="name">
- <element name="name">
- <optional>
- <attribute name="path">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="ns">
- <element name="ns">
- <attribute name="uri">
- <ref name="uriValue"/>
- </attribute>
- <attribute name="prefix">
- <ref name="nameValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="p">
- <element name="p">
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="class">
- <ref name="classValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="icon">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- <ref name="emph"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="param">
- <element name="param">
- <attribute name="name">
- <ref name="nameValue"/>
- </attribute>
- <attribute name="value">
- <ref name="non-empty-string"/>
- </attribute>
- </element>
- </define>
- <define name="pattern">
- <element name="pattern">
- <optional>
- <attribute name="documents">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <choice>
- <group>
- <attribute name="abstract">
- <value>true</value>
- </attribute>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="rule"/>
- </zeroOrMore>
- </group>
- </group>
- <group>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="rule"/>
- </zeroOrMore>
- </group>
- </group>
- <group>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <attribute name="is-a">
- <data type="IDREF"/>
- </attribute>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="param"/>
- </zeroOrMore>
- </group>
- </group>
- </choice>
- </interleave>
- </element>
- </define>
- <define name="phase">
- <element name="phase">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="active"/>
- </zeroOrMore>
- </group>
- </interleave>
- </element>
- </define>
- <define name="properties">
- <element name="properties">
- <zeroOrMore>
- <ref name="property"/>
- </zeroOrMore>
- </element>
- </define>
- <define name="property">
- <element name="property">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <optional>
- <attribute name="role">
- <ref name="roleValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="scheme"/>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="report">
- <element name="report">
- <attribute name="test">
- <ref name="exprValue"/>
- </attribute>
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="diagnostics">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="properties">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="rule">
- <element name="rule">
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <choice>
- <group>
- <attribute name="abstract">
- <value>true</value>
- </attribute>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <oneOrMore>
- <choice>
- <ref name="assert"/>
- <ref name="report"/>
- <ref name="extends"/>
- <ref name="p"/>
- </choice>
- </oneOrMore>
- </group>
- <group>
- <attribute name="context">
- <ref name="pathValue"/>
- </attribute>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <oneOrMore>
- <choice>
- <ref name="assert"/>
- <ref name="report"/>
- <ref name="extends"/>
- <ref name="p"/>
- </choice>
- </oneOrMore>
- </group>
- </choice>
- </interleave>
- </element>
- </define>
- <define name="span">
- <element name="span">
- <attribute name="class">
- <ref name="classValue"/>
- </attribute>
- <interleave>
- <ref name="foreign"/>
- <text/>
- </interleave>
- </element>
- </define>
- <define name="title">
- <element name="title">
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- </choice>
- </zeroOrMore>
- </element>
- </define>
- <define name="value-of">
- <element name="value-of">
- <attribute name="select">
- <ref name="pathValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <!-- common declarations -->
- <define name="inclusion">
- <element name="include">
- <attribute name="href">
- <ref name="uriValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="rich">
- <optional>
- <attribute name="icon">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="see">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="fpi">
- <ref name="fpiValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="xml:lang">
- <ref name="langValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="xml:space">
- <choice>
- <value>preserve</value>
- <value>default</value>
- </choice>
- </attribute>
- </optional>
- </define>
- <define name="linkable">
- <optional>
- <attribute name="role">
- <ref name="roleValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="subject">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- </define>
- <define name="foreign">
- <ref name="foreign-attributes"/>
- <zeroOrMore>
- <ref name="foreign-element"/>
- </zeroOrMore>
- </define>
- <define name="foreign-empty">
- <ref name="foreign-attributes"/>
- </define>
- <define name="foreign-attributes">
- <zeroOrMore>
- <attribute>
- <anyName>
- <except>
- <nsName ns=""/>
- <nsName ns="http://www.w3.org/XML/1998/namespace"/>
- </except>
- </anyName>
- </attribute>
- </zeroOrMore>
- </define>
- <define name="foreign-element">
- <element>
- <anyName>
- <except>
- <nsName/>
- </except>
- </anyName>
- <zeroOrMore>
- <choice>
- <attribute>
- <anyName/>
- </attribute>
- <ref name="foreign-element"/>
- <ref name="schema"/>
- <text/>
- </choice>
- </zeroOrMore>
- </element>
- </define>
- <!-- Data types -->
- <define name="uriValue">
- <data type="anyURI"/>
- </define>
- <define name="pathValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="exprValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="fpiValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="langValue">
- <data type="language"/>
- </define>
- <define name="roleValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="flagValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="nameValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <!-- In the default query language binding, xsd:NCNAME -->
- <define name="classValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="non-empty-string">
- <data type="token">
- <param name="minLength">1</param>
- </data>
- </define>
-</grammar>
Index: lxml-4.9.2/src/lxml/tests/test_isoschematron.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_isoschematron.py
+++ lxml-4.9.2/src/lxml/tests/test_isoschematron.py
@@ -55,6 +55,7 @@ class ETreeISOSchematronTestCase(HelperT
schema = isoschematron.Schematron(schema)
self.assertTrue(schema)
+ @unittest.skip("No RNG schema present, validation is not possible.")
def test_schematron_invalid_schema_empty(self):
schema = self.parse('''\
<schema xmlns="http://purl.oclc.org/dsdl/schematron" />