[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.117.94.180: ~ $
# 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):
    u"""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, \
                u"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, u"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(
                u"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):
        u"""__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()
            schematron.xmlSchematronSetValidStructuredErrors(
                valid_ctxt, _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(
                u"Internal error in Schematron validation",
                self._error_log)
        if ret == 0:
            return True
        else:
            return False

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
html Folder 0755
includes Folder 0755
isoschematron Folder 0755
ElementInclude.py File 8.36 KB 0644
__init__.py File 575 B 0644
_elementpath.cpython-311-x86_64-linux-gnu.so File 419.42 KB 0755
_elementpath.py File 10.49 KB 0644
apihelpers.pxi File 62.94 KB 0644
builder.cpython-311-x86_64-linux-gnu.so File 222.23 KB 0755
builder.py File 7.96 KB 0644
classlookup.pxi File 21.94 KB 0644
cleanup.pxi File 8.26 KB 0644
cssselect.py File 3.29 KB 0644
debug.pxi File 3.21 KB 0644
docloader.pxi File 5.65 KB 0644
doctestcompare.py File 17.91 KB 0644
dtd.pxi File 14.86 KB 0644
etree.cpython-311-x86_64-linux-gnu.so File 8.46 MB 0755
etree.h File 8.37 KB 0644
etree.pyx File 129.31 KB 0644
etree_api.h File 17.06 KB 0644
extensions.pxi File 32.46 KB 0644
iterparse.pxi File 16.22 KB 0644
lxml.etree.h File 8.37 KB 0644
lxml.etree_api.h File 17.06 KB 0644
nsclasses.pxi File 8.93 KB 0644
objectify.cpython-311-x86_64-linux-gnu.so File 4.25 MB 0755
objectify.pyx File 75.29 KB 0644
objectpath.pxi File 11.21 KB 0644
parser.pxi File 76.41 KB 0644
parsertarget.pxi File 6.7 KB 0644
proxy.pxi File 23.01 KB 0644
public-api.pxi File 6.5 KB 0644
pyclasslookup.py File 92 B 0644
readonlytree.pxi File 18.6 KB 0644
relaxng.pxi File 5.94 KB 0644
sax.cpython-311-x86_64-linux-gnu.so File 366.73 KB 0755
sax.py File 9.18 KB 0644
saxparser.pxi File 31.78 KB 0644
schematron.pxi File 5.65 KB 0644
serializer.pxi File 66.41 KB 0644
usedoctest.py File 230 B 0644
xinclude.pxi File 2.4 KB 0644
xmlerror.pxi File 48.37 KB 0644
xmlid.pxi File 5.92 KB 0644
xmlschema.pxi File 7.89 KB 0644
xpath.pxi File 19.11 KB 0644
xslt.pxi File 35.83 KB 0644
xsltext.pxi File 10.83 KB 0644