GRAYBYTE WORDPRESS FILE MANAGER7144

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/hc_python/lib/python3.12/site-packages/lxml/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/hc_python/lib/python3.12/site-packages/lxml//schematron.pxi
# support for Schematron validation
from lxml.includes cimport schematron


cdef class SchematronError(LxmlError):
    """Base class of all Schematron errors.
    """

cdef class SchematronParseError(SchematronError):
    """Error while parsing an XML document as Schematron schema.
    """

cdef class SchematronValidateError(SchematronError):
    """Error while validating an XML document with a Schematron schema.
    """


################################################################################
# Schematron

cdef class Schematron(_Validator):
    """Schematron(self, etree=None, file=None)
    A Schematron validator.

    Pass a root Element or an ElementTree to turn it into a validator.
    Alternatively, pass a filename as keyword argument 'file' to parse from
    the file system.

    Schematron is a less well known, but very powerful schema language.  The main
    idea is to use the capabilities of XPath to put restrictions on the structure
    and the content of XML documents.  Here is a simple example::

      >>> schematron = Schematron(XML('''
      ... <schema xmlns="http://www.ascc.net/xml/schematron" >
      ...   <pattern name="id is the only permitted attribute name">
      ...     <rule context="*">
      ...       <report test="@*[not(name()='id')]">Attribute
      ...         <name path="@*[not(name()='id')]"/> is forbidden<name/>
      ...       </report>
      ...     </rule>
      ...   </pattern>
      ... </schema>
      ... '''))

      >>> xml = XML('''
      ... <AAA name="aaa">
      ...   <BBB id="bbb"/>
      ...   <CCC color="ccc"/>
      ... </AAA>
      ... ''')

      >>> schematron.validate(xml)
      0

      >>> xml = XML('''
      ... <AAA id="aaa">
      ...   <BBB id="bbb"/>
      ...   <CCC/>
      ... </AAA>
      ... ''')

      >>> schematron.validate(xml)
      1

    Schematron was added to libxml2 in version 2.6.21.  Before version 2.6.32,
    however, Schematron lacked support for error reporting other than to stderr.
    This version is therefore required to retrieve validation warnings and
    errors in lxml.
    """
    cdef schematron.xmlSchematron* _c_schema
    cdef xmlDoc* _c_schema_doc
    def __cinit__(self):
        self._c_schema = NULL
        self._c_schema_doc = NULL

    def __init__(self, etree=None, *, file=None):
        cdef _Document doc
        cdef _Element root_node
        cdef xmlNode* c_node
        cdef char* c_href
        cdef schematron.xmlSchematronParserCtxt* parser_ctxt = NULL
        _Validator.__init__(self)
        if not config.ENABLE_SCHEMATRON:
            raise SchematronError, \
                "lxml.etree was compiled without Schematron support."
        if etree is not None:
            doc = _documentOrRaise(etree)
            root_node = _rootNodeOrRaise(etree)
            self._c_schema_doc = _copyDocRoot(doc._c_doc, root_node._c_node)
            parser_ctxt = schematron.xmlSchematronNewDocParserCtxt(self._c_schema_doc)
        elif file is not None:
            filename = _getFilenameForFile(file)
            if filename is None:
                # XXX assume a string object
                filename = file
            filename = _encodeFilename(filename)
            with self._error_log:
                orig_loader = _register_document_loader()
                parser_ctxt = schematron.xmlSchematronNewParserCtxt(_cstr(filename))
                _reset_document_loader(orig_loader)
        else:
            raise SchematronParseError, "No tree or file given"

        if parser_ctxt is NULL:
            if self._c_schema_doc is not NULL:
                tree.xmlFreeDoc(self._c_schema_doc)
                self._c_schema_doc = NULL
            raise MemoryError()

        try:
            with self._error_log:
                orig_loader = _register_document_loader()
                self._c_schema = schematron.xmlSchematronParse(parser_ctxt)
                _reset_document_loader(orig_loader)
        finally:
            schematron.xmlSchematronFreeParserCtxt(parser_ctxt)

        if self._c_schema is NULL:
            raise SchematronParseError(
                "Document is not a valid Schematron schema",
                self._error_log)

    def __dealloc__(self):
        schematron.xmlSchematronFree(self._c_schema)
        if self._c_schema_doc is not NULL:
            tree.xmlFreeDoc(self._c_schema_doc)

    def __call__(self, etree):
        """__call__(self, etree)

        Validate doc using Schematron.

        Returns true if document is valid, false if not."""
        cdef _Document doc
        cdef _Element root_node
        cdef xmlDoc* c_doc
        cdef schematron.xmlSchematronValidCtxt* valid_ctxt
        cdef int ret

        assert self._c_schema is not NULL, "Schematron instance not initialised"
        doc = _documentOrRaise(etree)
        root_node = _rootNodeOrRaise(etree)

        valid_ctxt = schematron.xmlSchematronNewValidCtxt(
            self._c_schema, schematron.XML_SCHEMATRON_OUT_ERROR)
        if valid_ctxt is NULL:
            raise MemoryError()

        try:
            self._error_log.clear()
            # Need a cast here because older libxml2 releases do not use 'const' in the functype.
            schematron.xmlSchematronSetValidStructuredErrors(
                valid_ctxt, <xmlerror.xmlStructuredErrorFunc> _receiveError, <void*>self._error_log)
            c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)
            with nogil:
                ret = schematron.xmlSchematronValidateDoc(valid_ctxt, c_doc)
            _destroyFakeDoc(doc._c_doc, c_doc)
        finally:
            schematron.xmlSchematronFreeValidCtxt(valid_ctxt)

        if ret == -1:
            raise SchematronValidateError(
                "Internal error in Schematron validation",
                self._error_log)
        if ret == 0:
            return True
        else:
            return False

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
May 23 2025 08:31:29
root / root
0755
__pycache__
--
April 04 2025 08:00:21
root / root
0755
html
--
April 04 2025 08:00:21
root / root
0755
includes
--
April 04 2025 08:00:21
root / root
0755
isoschematron
--
April 04 2025 08:00:21
root / root
0755
ElementInclude.py
8.359 KB
April 04 2025 08:00:21
root / root
0644
__init__.py
0.561 KB
April 04 2025 08:00:21
root / root
0644
_elementpath.cpython-312-x86_64-linux-gnu.so
200.188 KB
April 04 2025 08:00:21
root / root
0755
_elementpath.py
10.633 KB
April 04 2025 08:00:21
root / root
0644
apihelpers.pxi
62.119 KB
April 04 2025 08:00:21
root / root
0644
builder.cpython-312-x86_64-linux-gnu.so
113.805 KB
April 04 2025 08:00:21
root / root
0755
builder.py
7.91 KB
April 04 2025 08:00:21
root / root
0644
classlookup.pxi
21.909 KB
April 04 2025 08:00:21
root / root
0644
cleanup.pxi
8.256 KB
April 04 2025 08:00:21
root / root
0644
cssselect.py
3.229 KB
April 04 2025 08:00:21
root / root
0644
debug.pxi
3.205 KB
April 04 2025 08:00:21
root / root
0644
docloader.pxi
5.637 KB
April 04 2025 08:00:21
root / root
0644
doctestcompare.py
17.315 KB
April 04 2025 08:00:21
root / root
0644
dtd.pxi
14.923 KB
April 04 2025 08:00:21
root / root
0644
etree.cpython-312-x86_64-linux-gnu.so
5.11 MB
April 04 2025 08:00:21
root / root
0755
etree.h
9.68 KB
April 04 2025 08:00:21
root / root
0644
etree.pyx
131.364 KB
April 04 2025 08:00:21
root / root
0644
etree_api.h
16.663 KB
April 04 2025 08:00:21
root / root
0644
extensions.pxi
31.336 KB
April 04 2025 08:00:21
root / root
0644
iterparse.pxi
16.134 KB
April 04 2025 08:00:21
root / root
0644
lxml.etree.h
9.68 KB
April 04 2025 08:00:21
root / root
0644
lxml.etree_api.h
16.668 KB
April 04 2025 08:00:21
root / root
0644
nsclasses.pxi
8.915 KB
April 04 2025 08:00:21
root / root
0644
objectify.cpython-312-x86_64-linux-gnu.so
2.94 MB
April 04 2025 08:00:21
root / root
0755
objectify.pyx
73.96 KB
April 04 2025 08:00:21
root / root
0644
objectpath.pxi
11.182 KB
April 04 2025 08:00:21
root / root
0644
parser.pxi
80.117 KB
April 04 2025 08:00:21
root / root
0644
parsertarget.pxi
6.178 KB
April 04 2025 08:00:21
root / root
0644
proxy.pxi
23.142 KB
April 04 2025 08:00:21
root / root
0644
public-api.pxi
6.51 KB
April 04 2025 08:00:21
root / root
0644
pyclasslookup.py
0.09 KB
April 04 2025 08:00:21
root / root
0644
readonlytree.pxi
18.531 KB
April 04 2025 08:00:21
root / root
0644
relaxng.pxi
6.19 KB
April 04 2025 08:00:21
root / root
0644
sax.cpython-312-x86_64-linux-gnu.so
181.68 KB
April 04 2025 08:00:21
root / root
0755
sax.py
9.085 KB
April 04 2025 08:00:21
root / root
0644
saxparser.pxi
32.541 KB
April 04 2025 08:00:21
root / root
0644
schematron.pxi
5.77 KB
April 04 2025 08:00:21
root / root
0644
serializer.pxi
64.212 KB
April 04 2025 08:00:21
root / root
0644
usedoctest.py
0.225 KB
April 04 2025 08:00:21
root / root
0644
xinclude.pxi
2.398 KB
April 04 2025 08:00:21
root / root
0644
xmlerror.pxi
48.686 KB
April 04 2025 08:00:21
root / root
0644
xmlid.pxi
5.931 KB
April 04 2025 08:00:21
root / root
0644
xmlschema.pxi
8.291 KB
April 04 2025 08:00:21
root / root
0644
xpath.pxi
18.684 KB
April 04 2025 08:00:21
root / root
0644
xslt.pxi
35.179 KB
April 04 2025 08:00:21
root / root
0644
xsltext.pxi
10.828 KB
April 04 2025 08:00:21
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF