Sync from SUSE:ALP:Source:Standard:1.0 python-lxml revision ace179b922d6696d5a9bad1c87d173c0

This commit is contained in:
Adrian Schröter 2023-10-19 01:29:48 +02:00
commit c5c63e7ddb
11 changed files with 2679 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

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.3/CHANGES.txt
===================================================================
--- lxml-4.9.3.orig/CHANGES.txt
+++ lxml-4.9.3/CHANGES.txt
@@ -27,6 +27,14 @@ Other changes
* Built with Cython 0.29.36 to adapt to changes in Python 3.12.
+* 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.3/doc/validation.txt
===================================================================
--- lxml-4.9.3.orig/doc/validation.txt
+++ lxml-4.9.3/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.3/src/lxml/isoschematron/__init__.py
===================================================================
--- lxml-4.9.3.orig/src/lxml/isoschematron/__init__.py
+++ lxml-4.9.3/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

@ -0,0 +1,29 @@
---
src/lxml/tests/test_etree.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/src/lxml/tests/test_etree.py
+++ b/src/lxml/tests/test_etree.py
@@ -18,6 +18,7 @@ import re
import gc
import operator
import textwrap
+import tempfile
import zlib
import gzip
@@ -5276,9 +5277,11 @@ class ETreeWriteTestCase(HelperTestCase)
def test_write_file_gzip_parse(self):
tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>'))
- with tmpfile() as filename:
- tree.write(filename, compression=9)
- data = etree.tostring(etree.parse(filename))
+ with tempfile.NamedTemporaryFile() as f:
+ tree.write(f.name, compression=9)
+ f.file.flush()
+ f.file.seek(0)
+ data = etree.tostring(etree.parse(f.name))
self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'),
data)

BIN
lxml-4.9.3.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
lxmldoc-4.5.2.pdf (Stored with Git LFS) Normal file

Binary file not shown.

1604
python-lxml.changes Normal file

File diff suppressed because it is too large Load Diff

2
python-lxml.rpmlintrc Normal file
View File

@ -0,0 +1,2 @@
addFilter("zero-length")
addFilter("no-dependency-on python-base")

142
python-lxml.spec Normal file
View File

@ -0,0 +1,142 @@
#
# spec file for package python-lxml
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?sle15_python_module_pythons}
Name: python-lxml
Version: 4.9.3
Release: 0
Summary: Pythonic XML processing library
License: BSD-3-Clause AND GPL-2.0-or-later
Group: Development/Languages/Python
URL: https://lxml.de/
Source0: https://files.pythonhosted.org/packages/source/l/lxml/lxml-%{version}.tar.gz
Source1: https://lxml.de/lxmldoc-4.5.2.pdf
Source99: python-lxml.rpmlintrc
# PATCH-FIX-UPSTREAM close_file_before_test.patch bsc#1206555 mcepl@suse.com
# make sure the testing data are flushed to the file
Patch0: close_file_before_test.patch
# PATCH-FIX-OPENSUSE Skip a test under libxml2 2.10.4+
# https://bugs.launchpad.net/lxml/+bug/2016939
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 with %python-Cython < 3}
BuildRequires: %{python_module base}
BuildRequires: %{python_module cssselect >= 0.9.1}
BuildRequires: %{python_module setuptools >= 18.0.1}
BuildRequires: fdupes
%if 0%{?suse_version} == 1500
# Assume the best that the old libxml2 in SLE15 is patched for https://gitlab.gnome.org/GNOME/libxml2/-/issues/378 (CVE-2022-2309)
BuildRequires: libxml2-devel
%else
BuildRequires: libxml2-devel >= 2.10.2
%endif
BuildRequires: libxslt-devel >= 1.1.27
BuildRequires: python-rpm-macros
Requires: python-cssselect >= 0.9.1
%python_subpackages
%description
lxml is a Pythonic binding for the libxml2 and libxslt libraries. It
provides convenient access to these libraries using the ElementTree
API. It extends the ElementTree API significantly to offer support for XPath,
RelaxNG, XML Schema, XSLT and C14N.
%if 0%{?suse_version} > 1500
%package -n %{name}-doc
Summary: Documentation for python-lxml, an XML processing library
Group: Documentation/Other
BuildArch: noarch
%description -n %{name}-doc
lxml is a Pythonic binding for the libxml2 and libxslt libraries. It
provides convenient access to these libraries using the ElementTree
API. It extends the ElementTree API significantly to offer support for XPath,
RelaxNG, XML Schema, XSLT and C14N.
This package contains documentation for lxml (HTML and PDF).
%endif
%package devel
Summary: Development files for python-lxml
Group: Development/Libraries/Python
Requires: %{name} = %{version}
%description devel
lxml is a Pythonic binding for the libxml2 and libxslt libraries. It
provides convenient access to these libraries using the ElementTree
API. It extends the ElementTree API significantly to offer support for XPath,
RelaxNG, XML Schema, XSLT and C14N.
This package contains header files needed to use lxml's C API.
%prep
%autosetup -p1 -n lxml-%{version}
cp %{SOURCE1} .
# remove generated files
find -name '*.c' -delete -print
rm src/lxml/lxml.etree.h
rm src/lxml/lxml.etree_api.h
%build
export CFLAGS="%{optflags}"
%python_build --with-cython
%check
# The tests fail on SLE 11 due to broken incremental parsing in libxml2
export CFLAGS="%{optflags}"
export LANG=en_US.UTF-8
export PYTHONUNBUFFERED=x
# cyclic dependency between html5lib and lxml
rm -v src/lxml/html/tests/test_html5parser.py
%{python_expand PYTHON3="$python" %make_build test3}
%install
%python_install
%python_expand %fdupes %{buildroot}
%files %{python_files}
%license LICENSES.txt
%doc CHANGES.txt CREDITS.txt README.rst
%{python_sitearch}/lxml/
%{python_sitearch}/lxml-%{version}-py%{python_version}.egg-info
%exclude %{python_sitearch}/lxml/*.h
%exclude %{python_sitearch}/lxml/includes/*.h
%if 0%{?suse_version} > 1500
%files -n %{name}-doc
%license LICENSES.txt
%endif
%doc doc/html
%doc lxmldoc-*.pdf
%files %{python_files devel}
%license LICENSES.txt
%{python_sitearch}/lxml/*.h
%{python_sitearch}/lxml/includes/*.h
%changelog

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" />

View File

@ -0,0 +1,12 @@
Index: lxml-4.9.2/src/lxml/tests/test_etree.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_etree.py
+++ lxml-4.9.2/src/lxml/tests/test_etree.py
@@ -3068,6 +3068,7 @@ class ETreeOnlyTestCase(HelperTestCase):
self.assertEqual(re, e.nsmap)
self.assertEqual(r, s.nsmap)
+ @unittest.skipIf(etree.LIBXML_VERSION >= (2, 10, 4), "libxml2 regression ignores namespaces")
def test_html_prefix_nsmap(self):
etree = self.etree
el = etree.HTML('<hha:page-description>aa</hha:page-description>').find('.//page-description')

View File

@ -0,0 +1,20 @@
Index: lxml-4.9.2/src/lxml/tests/test_io.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_io.py
+++ lxml-4.9.2/src/lxml/tests/test_io.py
@@ -15,6 +15,7 @@ from .common_imports import (
read_file, write_to_file, BytesIO, tmpfile
)
+import lxml
class _IOTestCaseBase(HelperTestCase):
"""(c)ElementTree compatibility for IO functions/methods
@@ -304,6 +305,7 @@ class _IOTestCaseBase(HelperTestCase):
os.unlink(f.name)
self.assertEqual(utext, root.text)
+ @unittest.skipIf(lxml.etree.LIBXML_VERSION >= (2, 11, 1), "libxml2 regression has issues with utf16")
def test_iterparse_utf16_bom(self):
utext = _str('Søk på nettet')
uxml = '<?xml version="1.0" encoding="UTF-16"?><p>%s</p>' % utext