home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-libxml2 / examples / validRNG.py < prev    next >
Encoding:
Python Source  |  2005-03-30  |  1.9 KB  |  77 lines

  1. #!/usr/bin/python -u
  2. import libxml2
  3. import sys
  4.  
  5. ARG = 'test string'
  6.  
  7. class ErrorHandler:
  8.  
  9.     def __init__(self):
  10.         self.errors = []
  11.  
  12.     def handler(self, msg, data):
  13.         if data != ARG:
  14.             raise Exception, "Error handler did not receive correct argument"
  15.         self.errors.append(msg)
  16.  
  17. # Memory debug specific
  18. libxml2.debugMemory(1)
  19.  
  20. schema="""<?xml version="1.0"?>
  21. <element name="foo"
  22.          xmlns="http://relaxng.org/ns/structure/1.0"
  23.          xmlns:a="http://relaxng.org/ns/annotation/1.0"
  24.          xmlns:ex1="http://www.example.com/n1"
  25.          xmlns:ex2="http://www.example.com/n2">
  26.   <a:documentation>A foo element.</a:documentation>
  27.   <element name="ex1:bar1">
  28.     <empty/>
  29.   </element>
  30.   <element name="ex2:bar2">
  31.     <empty/>
  32.   </element>
  33. </element>
  34. """
  35.  
  36. valid="""<?xml version="1.0"?>
  37. <foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>"""
  38.  
  39. invalid="""<?xml version="1.0"?>
  40. <foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1">bad</pre1:bar1><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>"""
  41.  
  42. rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
  43. rngs = rngp.relaxNGParse()
  44. ctxt = rngs.relaxNGNewValidCtxt()
  45. e = ErrorHandler()
  46. ctxt.setValidityErrorHandler(e.handler, e.handler, ARG)
  47.  
  48. # Test valid document
  49. doc = libxml2.parseDoc(valid)
  50. ret = doc.relaxNGValidateDoc(ctxt)
  51. if ret != 0 or e.errors:
  52.     print "error doing RelaxNG validation"
  53.     sys.exit(1)
  54. doc.freeDoc()
  55.  
  56. # Test invalid document
  57. doc = libxml2.parseDoc(invalid)
  58. ret = doc.relaxNGValidateDoc(ctxt)
  59. if ret == 0 or not e.errors:
  60.     print "Error: document supposed to be RelaxNG invalid"
  61.     sys.exit(1)
  62. doc.freeDoc()
  63.  
  64. del rngp
  65. del rngs
  66. del ctxt
  67. libxml2.relaxNGCleanupTypes()
  68.  
  69. # Memory debug specific
  70. libxml2.cleanupParser()
  71. if libxml2.debugMemory(1) == 0:
  72.     print "OK"
  73. else:
  74.     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
  75.     libxml2.dumpMemory()
  76.  
  77.