Search code examples
pythonxmlrelaxng

How do I validate XML document using compact RELAX NG schema in Python?


How do I validate XML document via compact RELAX NG schema in Python?


Solution

  • How about using lxml?

    From the docs:

    >>> f = StringIO('''\
    ... <element name="a" xmlns="http://relaxng.org/ns/structure/1.0">
    ...  <zeroOrMore>
    ...     <element name="b">
    ...       <text />
    ...     </element>
    ...  </zeroOrMore>
    ... </element>
    ... ''')
    >>> relaxng_doc = etree.parse(f)
    >>> relaxng = etree.RelaxNG(relaxng_doc)
    
    >>> valid = StringIO('<a><b></b></a>')
    >>> doc = etree.parse(valid)
    >>> relaxng.validate(doc)
    True
    
    >>> invalid = StringIO('<a><c></c></a>')
    >>> doc2 = etree.parse(invalid)
    >>> relaxng.validate(doc2)
    False